#pragma once

#include <stdlib.h>
#include <string>
#include <vector>
#include "../shared/shared_types.h"

namespace Putin{

/**
* A simple test class for representation of the renderable objects.
*/
class RenderableUnit
{
public:

	

public:
	RenderableUnit();

	~RenderableUnit(void);

	//Getters
	/**
	* Gets unit position. 
	*/ 
	virtual Vec3f getPosition();
    /**
	* Gets unit facing direction. 
	*/ 
	virtual Vec3f getFacingDirection();
	/**
	* Gets unit child direction. 
	*/ 
	virtual Vec3f getChildDirection()=0;
    /**
	* Gets unit up vector. 
	*/ 
	virtual Vec3f getUpVector();
	/**
	* Gets unit Id. 
	*/ 
	virtual std::string getId();
	/**
	* Gets unit mesh. 
	*/ 
	virtual std::string getMesh();
	/**
	* Gets unit material. 
	*/ 
	virtual std::string getMaterial();
	/**
	* Gets unit child mesh. 
	*/ 	
	virtual std::string getChildMesh()=0;
	/**
	* Gets unit child material. 
	*/ 	
	virtual std::string getChildMaterial()=0;
	/**
	* Returns true if unit has a child. 
	*/ 	
	virtual bool hasChild()=0;
	/**
	* returns true if unit is a chadow caster. 
	*/ 	
	virtual bool isShadowcaster()=0;
	/**
	* Gets unit scale. 
	*/ 	
	virtual float getScale()=0;

private:

	Vec3f mPosition;
    Vec3f mFacingDirection;
    Vec3f mUpVector;
	std::string mId;

	std::string mMaterial;
	std::string mMesh;
};
}//End namespace Putin